import { store } from '@/store/store'
import { Toast } from 'antd-mobile'
import axios from 'axios'
import { customHistory } from './history'

// 导出一个自定义 axios 实例
export const http = axios.create({
  // baseURL: 'http://toutiao.itheima.net/v1_0',
  baseURL: 'http://geek.itheima.net/v1_0',
  timeout: 5000
})

// 1 请求拦截器
http.interceptors.request.use(config => {
  console.log('config', config)
  // config 处理流程中配置对象
  // 根据url添加token
  const token = store.getState().login.token

  // 除登录外的接口，都传token
  if (!config.url?.startsWith('/authorizations')) {
    // 添加token
    config.headers!.Authorization = `Bearer ${token}`
  }

  // 别忘了把config交给后面流程处理
  return config
})

// 2 响应拦截器
http.interceptors.response.use(undefined, error => {
  console.log('error', error)
  // 处理超时
  if (!error.response) {
    // 这是开发者对异常统一处理
    console.log('超时错误发生了')
    Toast.show({ content: '网络繁忙，请稍后再试', duration: 500 })
  }

  // token 过期
  if (error.response.statue === 401) {
    console.log('token过期')
    Toast.show({
      content: '认证过期，请重新登录',
      duration: 1000,
      afterClose: () => {
        customHistory.push('/login', {
          from: customHistory.location.pathname
        })
        // 清除token TODO
        // store.dispatch(logout())
      }
    })
  }

  // 把错误处理权交还给axios
  return Promise.reject(error)
})
